home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / MCASM.RAR / MC_ASM.EXE / WROX_ASM / CH12 / EFFECTS / EFFDEMO.C < prev    next >
C/C++ Source or Header  |  1994-05-02  |  4KB  |  215 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <mem.h>
  4. #include <dos.h>
  5. #include <conio.h>
  6.  
  7. #include "screff.h"
  8. #include "paleff.h"
  9.  
  10. #define WORD unsigned int
  11. #define BYTE unsigned char
  12.  
  13. void mdelay(void);
  14. void CreateEmptyPic(void* &p);
  15. void LoadBMPFile(char *bmpname,void* &imageptr,VGApalette &palptr);
  16.  
  17. void main(int argc,char **argv)
  18. {
  19. void *v,*p,*p1,*p2,*p3;
  20. VGApalette pal;
  21. long fsize;
  22. int i,j;
  23.  
  24. randomize();
  25. asm {
  26.         mov ax,0x13
  27.         int 0x10
  28. }
  29. v = MK_FP(0xA000,0);
  30.  
  31. if (argc < 4) exit;
  32. LoadBMPFile(argv[1],p,pal);
  33. LoadBMPFile(argv[2],p1,pal);
  34. LoadBMPFile(argv[3],p2,pal);
  35. CreateEmptyPic(p3);
  36.  
  37. setDACblock(0,256,pal);
  38.  
  39. ShowFromCenter(0,0,319,199,0,p,v);
  40. mdelay();
  41. ShowFromCenter(0,0,319,199,0,p1,v);
  42. mdelay();
  43. ShowFromCenter(0,0,319,199,0,p3,v);
  44. mdelay();
  45. ShowFromCenter(0,0,319,199,1,p2,v);
  46.  
  47. mdelay();
  48. CenterExplode(0,0,319,199,2,p1,NULL,v);
  49.  
  50. mdelay();
  51. ShowToCenter(0,0,319,199,0,p,v);
  52.  
  53. mdelay();
  54. Jalousie(0,0,319,199,30,0,p1,v);
  55.  
  56. mdelay();
  57. RandomFillArea(0,0,319,199,5,5,p2,v);
  58.  
  59. mdelay();
  60. RandomFillArea(0,0,319,199,2,50,p,v);
  61.  
  62. mdelay();
  63. BadFAX(0,0,319,199,25,0,p1,v);
  64.  
  65. mdelay();
  66. BadFAX(0,0,319,199,15,1,p2,v);
  67.  
  68. mdelay();
  69. for(i=0;i<=7;i++) RandomFillArea(i*40,0,i*40+39,199,2,40,p,v);
  70.  
  71. mdelay();
  72. Develope(0,0,319,199,111,p1,v);
  73.  
  74. mdelay();
  75. Explode(0,0,319,199,p2,v);
  76.  
  77. mdelay();
  78. ShowFromCorner(0,0,319,199,20,0,p1,v);
  79. mdelay();
  80. ShowFromCorner(0,0,319,199,20,1,p2,v);
  81. mdelay();
  82. ShowFromCorner(0,0,319,199,20,2,p,v);
  83. mdelay();
  84. ShowFromCorner(0,0,319,199,20,3,p2,v);
  85.  
  86. mdelay();
  87. Gone_with_the_wind(0,0,319,199,p2,p1,v);
  88.  
  89. mdelay();
  90. Slide(0,0,319,199,1,0,p2,v);
  91. mdelay();
  92. Slide(20,20,300,159,2,1,p,v);
  93. mdelay();
  94. Slide(40,30,250,168,1,3,p2,v);
  95. mdelay();
  96. Slide(0,0,319,199,3,3,p1,v);
  97.  
  98. mdelay();
  99. for(i=0;i<=9;i++) Slide(50,i*20,300,i*20+19,1,2,p,v);
  100. mdelay();
  101. for(i=0;i<=9;i++) Slide(i*32,0,i*32+31,199,2,0,p2,v);
  102. mdelay();
  103. for(i=9;i>=0;i--) Slide(i*32,0,i*32+31,199,2,0,p1,v);
  104.  
  105. mdelay();
  106. for(i=0;i<=3;i++) CenterExplode(i*80,0,i*80+79,199,2,p1,p2,v);
  107.  
  108. mdelay();
  109. CenterExplode(0,0,319,199,2,p,NULL,v);
  110.  
  111. mdelay();
  112. for(i=0;i<=19;i++)
  113. if (i%2 == 0) Slide(i*16,0,i*16+15,199,2,0,p1,v);
  114.        else Slide(i*16,0,i*16+15,199,2,1,p1,v);
  115.  
  116. mdelay();
  117. for(i=0;i<=199;i++)
  118. for(j=0;j<=319;j++)
  119. if ((i+j)%2 == 0) *&MixBuffer(v)[i][j]=*&MixBuffer(p1)[i][j];
  120.         else *&MixBuffer(v)[i][j]=*&MixBuffer(p2)[i][j];
  121.  
  122. mdelay();
  123. Develope(0,0,319,199,127,p1,v);
  124.  
  125. mdelay();
  126.  
  127. Gone_with_the_wind(0,0,319,199,p1,p3,v);
  128. mdelay();
  129. Gone_with_the_wind(0,0,319,199,p3,p2,v);
  130. mdelay();
  131.  
  132. /*colwheeldemo1(v);
  133. getch();
  134. colwheeldemo2(v);
  135. getch();*/
  136. textmode(C80);
  137. printf(" That's all folks !");
  138. }
  139.  
  140. void mdelay(void) { delay(1000); }
  141.  
  142. void CreateEmptyPic(void* &ptr)
  143. {
  144. if ((ptr = malloc(64000)) == NULL )
  145. {
  146.    printf("Not enough memory to allocate buffer\n");
  147.    exit(1);  //terminate program if out of memory
  148. }
  149. memset(ptr,0,64000);
  150. }
  151.  
  152. typedef struct {
  153.     WORD bf_type;     //Bit Map
  154.     long bf_size;     //size of file in DWORD
  155.     WORD bf_reserved1, bf_reserved2;
  156.     long bf_offbits;     //image start offset in byte
  157. } bmp_file_header;
  158.  
  159. typedef struct {
  160.     long bi_size;
  161.     long bi_width;
  162.     long bi_height;
  163.     WORD bi_planes;
  164.     WORD bi_bit_count;
  165.     long bi_compression;
  166.     long bi_size_image;
  167.     long bi_xpels_per_meter;
  168.     long bi_ypels_per_meter;
  169.     long bi_clr_used;
  170.     long bi_clr_important;
  171. } bmp_file_info_header;
  172.  
  173. typedef BYTE bmp_palette[256][4];
  174.  
  175. void LoadBMPFile(char *bmpname,void* &imageptr,VGApalette &palptr)
  176. {
  177. FILE *fbmp;
  178. bmp_file_header bmpheader;
  179. bmp_file_info_header bmpinfo;
  180. bmp_palette palbmp;
  181. int DX,DY,i,Rest;
  182.  
  183. if ((fbmp = fopen(bmpname, "rb")) == NULL)
  184. {
  185.     printf("Cannot open bmp file.\n");
  186.     exit;
  187. }
  188. fread(&bmpheader,sizeof(bmpheader),1,fbmp);
  189. fread(&bmpinfo,sizeof(bmpinfo),1,fbmp);
  190. fread(palbmp,sizeof(palbmp),1,fbmp);
  191. for(i=0;i<=255;i++)
  192. {
  193.     palptr[i].r = palbmp[i][2]/4;
  194.     palptr[i].g = palbmp[i][1]/4;
  195.     palptr[i].b = palbmp[i][0]/4;
  196. }
  197. DX = bmpinfo.bi_width;
  198. DY = bmpinfo.bi_height;
  199. Rest = (bmpheader.bf_size-bmpheader.bf_offbits)/bmpinfo.bi_height;
  200. Rest = Rest - bmpinfo.bi_width;
  201. if ((long)DX*DY > 64000) exit(1);
  202. if ((imageptr = malloc(64000)) == NULL)
  203. {
  204.    printf("Not enough memory to allocate buffer\n");
  205.    exit(1);  // terminate program if out of memory
  206. };
  207. memset(imageptr,0,64000);
  208. for(i=DY-1;i>=0;i--)
  209. {
  210.     fread(MixBuffer(imageptr)[i],DX,1,fbmp);
  211.     fseek(fbmp,Rest,SEEK_CUR);
  212. }
  213. fclose(fbmp);
  214. }
  215.